home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / solaris.inc < prev    next >
Text File  |  2005-03-31  |  2KB  |  90 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4. # $Id: solaris.inc,v 1.3 2004/11/20 01:25:51 renaud Exp $
  5. #
  6.  
  7. function patch_installed(showrev, patch)
  8. {
  9.  local_var v, p,r,patches,spatches;
  10.  v = split(patch, sep:"-", keep:0);
  11.  patches = egrep(pattern:"^Patch: " + v[0], string:showrev);
  12.  if ( ! patches ) return 0; # No patch
  13. #
  14. # there may be more then one patch version be listed, so split up the result
  15. # and do a foreach check.
  16. #
  17.  spatches = split(patches, keep:0); 
  18.  flag = 0;
  19.  foreach r (spatches)
  20.     {
  21.      # Get the revision number of the installed patch
  22.      r = ereg_replace(pattern:"Patch: ([0-9]*-[0-9]*) .*", replace:"\1", string:r);
  23.      p = split(r, sep:"-", keep:0);
  24.      # If the installed patch is newer than or equal to what we expect, consider
  25.      # it installed
  26.  
  27.      if  ( int(p[1]) >= int(v[1]) ) 
  28.     flag = 1; # Patch is installed
  29.     }
  30. return flag;    
  31. }
  32.  
  33.  
  34. #
  35. # solaris_check_patch() returns :
  36. #    -1 if a patch is missing
  37. #    0  if a patch is not installed but not required (ie: other architecture)
  38. #    1 if the patch is installed
  39. #
  40. function solaris_check_patch(release, arch, patch, package, obsoleted_by) 
  41. {
  42.  local_var showrev, r, flag, packages, p;
  43.  
  44.  if ( "_x86" >< release )
  45.     release -= "_x86";
  46.  
  47.  packages = get_kb_item("Host/Solaris/pkginfo");
  48.  showrev = get_kb_item("Host/Solaris/showrev");
  49.  if ( ! packages || ! showrev || !release || !patch ) return 0;
  50.  
  51.  # Look if at least one of the packages installed are affected
  52.  # by this patch
  53.  flag = 0;
  54.  if ( strlen(package) )
  55.  {
  56.   package = split(package, sep:" ", keep:FALSE);
  57.   foreach p (package)
  58.     {
  59.       if ( egrep(pattern:"^.* " + p + " ", string:packages) ) flag ++;
  60.         }
  61.  
  62.  } else flag = 1;
  63.  
  64.  # No package is affected  - return
  65.  if ( flag == 0 ) return 0;
  66.  
  67.  
  68.  r = split(release, sep:" ", keep:0);
  69.  flag = 0;
  70.  foreach release (r)
  71.  {
  72.  if ( egrep(pattern:"^Release: " + release, string:showrev) ) flag ++;
  73.  }
  74.  
  75.  if ( ! flag ) return 0; # Not the right release
  76.  
  77.  if ( ! egrep(pattern:"^Application architecture: " + arch, string:showrev) ) 
  78.     return 0; # Wrong architecture (intel vs. sparc)
  79.  
  80.  if ( patch_installed(patch:patch, showrev:showrev) )
  81.     return 1; # Installed
  82.  
  83.  if ( obsoleted_by && patch_installed(patch:obsoleted_by, showrev:showrev) )
  84.     return 1; # Installed
  85.  
  86.  return -1; # Not installed
  87. }
  88.  
  89.  
  90.